package jschool.util.idioma;

import javax.swing.AbstractButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;

import jschool.manejadores.ManejadorDeIdioma;

public class CambiadorIdiomas {

	private ManejadorDeIdioma manejadorDeIdioma;
	private JLabel etiqueta;
	private JComboBox combo;
	private AbstractButton boton;
	private JTabbedPane tab;
	private String[] palabra;
	private String palabra1;
	private String palabraTraducida;

	private Componentes tipoComponente;
	private Object[] objetosTraducibles;
	private Object[] elementos;

	private static int indice;

	public CambiadorIdiomas() {
		manejadorDeIdioma = new ManejadorDeIdioma();
	}

	public void cambiarIdioma(String idioma, String locale) {
		objetosTraducibles = new Object[this.getElementos().length];

		for (indice = 0; indice < this.getElementos().length; indice++) {
			objetosTraducibles[indice] = this.getElementos()[indice];
		}

		for (Object objeto : objetosTraducibles) {
			if (objeto instanceof JLabel) {
				tipoComponente = Componentes.JLABEL;
			} else if (objeto instanceof JComboBox) {
				tipoComponente = Componentes.COMBO_BOX;
			} else if (objeto instanceof AbstractButton) {
				tipoComponente = Componentes.BOTONES;
			} else if (objeto instanceof JTabbedPane) {
				tipoComponente = Componentes.TAB;
			}
			switch (tipoComponente) {

			case JLABEL:
				etiqueta = (JLabel) objeto;
				palabra = etiqueta.getText().split(":");
				palabraTraducida = manejadorDeIdioma.getBundle(idioma, locale)
						.getString(palabra[0].replace(" ", ""));

				etiqueta.setText(palabraTraducida);
				break;

			case COMBO_BOX:
				combo = (JComboBox) objeto;
				int length = combo.getItemCount();

				for (int indice = 0; indice < length; indice++) {

					palabra1 = combo.getItemAt(indice).toString();
					palabraTraducida = manejadorDeIdioma.getBundle(idioma,
							locale).getString(palabra1);

					combo.removeItemAt(indice);
					combo.insertItemAt(palabraTraducida, indice);
				}

				break;

			case BOTONES:
				boton = (AbstractButton) objeto;

				palabra1 = boton.getText().trim();
				palabraTraducida = manejadorDeIdioma.getBundle(idioma, locale)
						.getString(palabra1);

				boton.setText(palabraTraducida);

				break;
			case TAB:
				tab = (JTabbedPane) objeto;
				int cantidad = tab.getTabCount();

				for (indice = 0; indice < cantidad; indice++) {
					palabra1 = tab.getTitleAt(indice).replace(" ", "");
					palabraTraducida = manejadorDeIdioma.getBundle(idioma,
							locale).getString(palabra1);
					tab.setTitleAt(indice, palabraTraducida);

				}
				break;
			}
		}

	}

	public void agregarElemento(Object... elementos) {
		this.elementos = elementos;

	}

	public Object[] getElementos() {
		return elementos;
	}
}
